package com.geaosu.wanandroid.kotlin.learn

/*
#### 在Kotlin中调用java函数式api
    注意:
        1. 条件限制: 如果在kotlin中调用一个java方法, 并且该方法接收一个 "java单抽象方法接口" 参数, 就可以使用函数式api;
        2. java单抽象方法接口指的是接口中只有一个待实现的方法, 如果接口中有多个待实现方法, 则无法使用函数式api;


 */

fun main() {
    // 在Kotlin中调用java函数式api


    /**
     *  先用java写一个例子
     */
//    new Thread(new Runnable() {
//        @Override
//        public void run() {
//            System.out.println("线程执行了");
//        }
//    }).start();

    /**
     * 将以上代码用kotlin实现
     */
//    Thread(object : Runnable {
//        override fun run() {
//            println("线程执行了")
//        }
//    }).start()

    /**
     * 对以上kotlin代码进行简化
     */
//    Thread(Runnable { println("线程执行了") }).start()


    /**
     * 对以上kotlin代码继续简化
     * 如果一个java方法的参数列表中不存在一个以上java单抽象方法接口参数, 还可以将接口名进行省略
     */
    // Thread({ println("线程执行了") }).start()

    /**
     * 最终简化
     * lambda表达式是方法的最后一个参数时, 可以将lambda表达式移到方法括号外面;
     * 如果lambda表达式还是方法的唯一一个参数, 还可以将方法的括号省略掉;
     */
    Thread { println("线程执行了") }.start()
}






